const fs = require('fs');
const path = require('path');
const axios = require('axios');
const http = require('http');
const sharp = require('sharp');

exports.mkdir = async function (folderpath) {
    try {
        const pathArr = folderpath.split('/');
        let _path = '';
        for (let i = 0; i < pathArr.length; i++) {
            if (pathArr[i]) {
                _path += `${pathArr[i]}/`;
                if (!fs.existsSync(_path)) {
                    fs.mkdirSync(_path);
                }
            }
        }
    } catch (e) { }
}

exports.splitPathAndFilename = (fullPath) => {
  const parts = fullPath.split('/');
  const filename = parts.pop(); // 提取文件名
  const path = 'D:/newWork/projectList2025/zskj' + parts.join('/') + (parts.length ? '/' : ''); // 重新组合路径
  return { path, filename };
}


/**
 * 检查文件是否存在
 * @param {string} filePath - 文件完整路径
 * @returns {boolean} - 是否存在
 */
function checkFileExists(filePath) {
  try {
    // 规范化路径（处理不同操作系统的路径分隔符）
    const normalizedPath = path.normalize(filePath);
    
    // 检查路径是否存在且是文件（不是目录）
    return fs.existsSync(normalizedPath) && fs.statSync(normalizedPath).isFile();
  } catch (err) {
    // 如果出现错误（如无权限），返回false
    return false;
  }
}

exports.saveNetworkImage = (filePath, toPath, ing, end) => {
		if(checkFileExists(toPath)) {
			console.log('文件已存在!'+filePath)
			return
		}
    http.get(filePath, (response) => {
        const chunks = [];
        // const fileStream = fs.createWriteStream(pathReslove('..'+imgPath) + '/');
        // console.log(response)
        // 监听响应的data事件，将数据写入文件流
        response.on('data', (bufferData) => {
            chunks.push(bufferData);
        });
        response.on('error', (err) => {
            console.log(err)
        });
        // 监听响应的end事件，表示数据接收完成
        response.on('end', () => {
            const fileBuffer = Buffer.concat(chunks);
						fs.writeFile(toPath, fileBuffer, (err) => {
						    if (err) {
						        console.log(err);
						        return;
						    }else {
									console.log('保存成功!'+toPath, `${ing}/${end}`)
								}
						});
            // // 使用 sharp 压缩图像
            // sharp(fileBuffer)
            //     .resize(800) // 设置宽度，例如 800px，保持比例
            //     .toFormat('jpeg', { quality: 80 }) // 设置格式和质量
            //     .toBuffer()
            //     .then(data => {
            //         // 将压缩后的数据写入文件
            //         fs.writeFile(toPath, fileBuffer, (err) => {
            //             if (err) {
            //                 console.log(err);
            //                 return;
            //             }else {
												// 	console.log('保存成功!'+toPath)
												// }
            //         });
            //     })
            //     .catch(err => {
            //         console.error('Error processing image:', err);
            //     });
            // 关闭文件流 
            // fileStream.end();
        });
    })
}

exports.saveHtmlInNode = (htmlContent, filePath) => {
  try {
    // 确保目录存在
    const dir = path.dirname(filePath);
    if (!fs.existsSync(dir)) {
      fs.mkdirSync(dir, { recursive: true });
    }
    
    fs.writeFileSync(filePath, htmlContent);
    console.log(`HTML文件已保存到: ${filePath}`);
    return true;
  } catch (err) {
    console.error('保存HTML文件失败:', err);
    return false;
  }
}

exports.getBackgroundUrlsFromHtml = (htmlString) => {
		if(htmlString.includes('url(')) {
			let arr = htmlString.split('url(')
			let arr1 = []
			for(let i of arr) {
				arr1.push(i.split(')')[0])
			}
			arr1.splice(0, 1)
			return arr1
		}else {
			return []
		}
    const backgroundUrls = new Set(); // 使用 Set 避免重复
   
       // 正则表达式匹配 background: url()
       const urlPattern = /background[^:]*:\s*url$\s*['"]?(.*?)['"]?\s*$/g;
   
       // 匹配所有 background: url() 的路径
       let match;
       while ((match = urlPattern.exec(htmlString)) !== null) {
				 console.log(match[1])
           backgroundUrls.add(match[1]); // 提取路径并添加到结果集
       }
   
       return Array.from(backgroundUrls); // 返回结果数组
}